package Platform.WandaFile;

import Base.DataFactory;
import Base.TestBase;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.commons.lang.StringUtils;
/**
 * Created by Alain on 2016/3/8.
 */
@SuppressWarnings("unused")
public class PlatformFile extends TestBase {
    private static TestBase TB = new TestBase();
    private static DataFactory DF = new DataFactory();
    private static String requestURL=null, response=null, requestBody=null,
                    parentId            = DF.getCellValue("WandaFile", "parentId"),
                    digest              = DF.getCellValue("WandaFile", "digest"),
                    snapshotId          = DF.getCellValue("WandaFile", "snapshotId"),
                    status              = DF.getCellValue("WandaFile", "status"),
                    projectId           = DF.getCellValue("WandaFile", "projectId"),
                    projectVersionId    = DF.getCellValue("WandaFile", "projectVersionId"),
                    projectCode         = DF.getCellValue("WandaFile", "projectCode"),
                    newProjectVersionId = DF.getCellValue("WandaFile", "newProjectVersionId"),
                    filePath            = DF.getCellValue("WandaFile", "filePath"),
                    fileId              = DF.getCellValue("WandaFile", "fileId"),
                    fileName            = DF.getCellValue("WandaFile", "fileName"),
                    fileVersionId       = DF.getCellValue("WandaFile", "fileVersionId"),
                    lockFileId          = DF.getCellValue("WandaFile", "lockFileId"),
                    size                = DF.getCellValue("WandaFile", "size"),
                    position            = DF.getCellValue("WandaFile", "position"),
                    newProjectId        = DF.getCellValue("WandaFile", "newProjectId"),
                    newProjectCode      = DF.getCellValue("WandaFile", "newProjectCode"),
                    name                = DF.getCellValue("WandaFile", "name"),
                    floor               = DF.getCellValue("WandaFile", "floor"),
                    specialty           = DF.getCellValue("WandaFile", "specialty"),
                    modelId             = DF.getCellValue("WandaFile", "modelId"),
                    versionId           = DF.getCellValue("WandaFile", "versionId");

    /*01.项目文档初始化
    POST  https://bim.wanda.cn/doc/{projectId}/{projectVersionId}?projectCode={projectCode}
    参数名             是否必选        类型      描述
    projectId	        是	 	                 项目ID
    projectVersionId	是	 	                 项目版本ID
    projectCode	        是	 	                 项目代码*/
    public String initialProject(){
        requestURL = "/doc/"+projectId+"/"+projectVersionId+"?projectCode="+projectCode;

        try {
            response = TB.apiResponse(requestURL, "POST");
        }catch (Exception e){

        }

        return response;
    }

    /*02.上传文件-Id
    POST  https://bim.wanda.cn/doc/{projectId}/{projectVersionId}/file/data?
                    parentId={parentId}&fileName={fileName}&size={size}&digest={digest}&position={position}
    参数名             是否必选        类型      描述
    projectId	        是	 	                 项目ID
    projectVersionId	是	 	                 项目版本ID
    parentId	        否	 	                 目录ID，为空时在根路径下创建子文件
    fileName	        是	                     字符串	文件名称，字符长度上限
    size	            是	           整数	     文件长度，单位byte，上限4G
    digest	            否	 	                 上传文件的md5摘要值，增加此参数支持秒传
    position            否	           整数	     上传续传时，续传的起始位置，默认为0*/
    public String uploadFileById(){
        String uploadFilePath = "src/main/resources/WDGC-Q-SY-AR-外立面.rvt";
        FileInputStream FIS;
        //projectId = "1";
        //projectVersionId = "784306105035931";
        try {
            FIS = new FileInputStream(new File(uploadFilePath));
            requestBody = FIS.toString();

            requestURL = "/doc/"+projectId+"/"+projectVersionId+"/file/data?fileName="+fileName+"&size="+size;

            if(StringUtils.isNotBlank(parentId)){
                requestURL = TB.getURL(requestURL) + "parentId=" + parentId;
            }
            if(StringUtils.isNotBlank(digest)){
                requestURL = TB.getURL(requestURL) + "digest=" + digest;
            }
            if(StringUtils.isNotBlank(position)){
                requestURL = TB.getURL(requestURL) + "position=" + position;
            }

            response = TB.apiResponse(requestURL, "POST", FIS);

            return response;
        } catch (Exception e){}

        return response;
    }

    /*02.上传文件-Path
    POST  https://bim.wanda.cn/doc/{projectId}/{projectVersionId}/file/data?
                    filePath={filePath}&size={size}&digest={digest}&position={position}
    参数名             是否必选        类型      描述
    projectId	        是	 	                 项目ID
    projectVersionId	是	 	                 项目版本ID
    size	            是	           整数	     文件长度，单位byte，上限4G
    filePath	        是	 	                 文件路径
    digest	            否	 	                 上传文件的md5摘要值，增加此参数支持秒传
    position            否	           整数	     上传续传时，续传的起始位置，默认为0*/
    public String uploadFileByPath(){
        requestURL = "/doc/"+projectId+"/"+projectVersionId+"/file/data?filePath="+filePath+"&size="+size;
        if(StringUtils.isNotBlank(digest)){
            requestURL = TB.getURL(requestURL) + "digest=" + digest;
        }
        if(StringUtils.isNotBlank(position)){
            requestURL = TB.getURL(requestURL) + "position=" + position;
        }

        //send request
        try {
            response = TB.apiResponse(requestURL, "POST", requestBody);

        }catch (Exception e){

        }

        return response;
    }

    /*03.下载文件-Id
    GET  https://bim.wanda.cn/doc/{projectId}/{projectVersionId}/file/data?fileVersionId={fileVersionId}
    参数名            是否必选         类型      描述
    projectId	        是	 	                 项目ID
    projectVersionId	是	 	                 版本ID
    fileVersionId	    是	 	                 目录或文件的版本ID*/
    public String downloadFileById(){
        requestURL ="/doc/"+projectId+"/"+projectVersionId+"/file/data?fileVersionId="+ fileVersionId;

        //send request
        try {
            response = TB.apiResponse(requestURL, "GET");

            FileOutputStream FOS = new FileOutputStream("src/main/resources/downloadFile.rvt");
            FOS.write(response.getBytes());
            FOS.flush();
            FOS.close();
        }catch (Exception e){

        }

        return response;
    }

    /*03.下载文件-Path
    GET  https://bim.wanda.cn/doc/{projectId}/{projectVersionId}/file/data?filePath={filePath}
    参数名            是否必选         类型      描述
    projectId	        是	 	                 项目ID
    projectVersionId	是	 	                 版本ID
    filePath	        是	 	                 按路径访问*/
    public String downloadFileByPath(){
        requestURL ="/doc/"+projectId+"/"+projectVersionId+"/file/data?filePath="+filePath;

        //send request
        try {
            response = TB.apiResponse(requestURL, "GET");

        }catch (Exception e){

        }

        return response;
    }

    /*04.获取子文件-Id
    GET  https://bim.wanda.cn/doc/{projectId}/{projectVersionId}/file/children?fileId={fileId}
    参数名             是否必选        类型      描述
    fileId	            否	 	                 目录ID，为空时列出空间下根路径下的子文件
    filePath	        是	 	                 目录路径，为空时列出空间下根路径下的子文件
    projectId	        是	 	                 项目ID
    projectVersionId	是	 	                 版本ID*/
    public String getSubFileById(){
        requestURL ="/doc/"+projectId+"/"+projectVersionId+"/file/children?fileId="+fileId;

        //send request
        try {
            response = TB.apiResponse(requestURL, "GET");

        }catch (Exception e){

        }

        return response;
    }

    /*04.获取子文件-Path
    GET  https://bim.wanda.cn/doc/{projectId}/{projectVersionId}/file/children?filePath={filePath}
    参数名             是否必选        类型      描述
    filePath	        是	 	                 目录路径，为空时列出空间下根路径下的子文件
    projectId	        是	 	                 项目ID
    projectVersionId	是	 	                 版本ID*/
    public String getSubFileByPath(){
        requestURL ="/doc/"+projectId+"/"+projectVersionId+"/file/children?filePath="+filePath;

        //send request
        try {
            response = TB.apiResponse(requestURL, "GET");

        }catch (Exception e){

        }

        return response;
    }

    /*05.获取目录结构
    GET  https://bim.wanda.cn/doc/{projectId}/{projectVersionId}/file/tree
    参数名             是否必选        类型      描述
    projectId	        是	 	                 项目ID
    projectVersionId	是	 	                 项目版本ID*/
    public String getFileTree(){
        requestURL ="/doc/"+projectId+"/"+projectVersionId+"/file/tree";

        //send request
        try {
            response = TB.apiResponse(requestURL, "GET");

        }catch (Exception e){

        }

        return response;
    }


    /*06.获取文件信息
    POST  https://bim.wanda.cn/doc/{projectId}/{projectVersionId}/file/meta?fileVersionId={fileVersionId}
    参数名             是否必选        类型      描述
    projectId	        是	 	                 项目ID
    projectVersionId	是	 	                 项目版本ID
    fileVersionId	    是	 	                 文件版本ID*/
    public String getFileInfo(){
        requestURL ="/doc/"+projectId+"/"+projectVersionId+"/file/meta?fileVersionId="+fileVersionId;

        //send request
        try {
            response = TB.apiResponse(requestURL, "GET");

        }catch (Exception e){

        }

        return response;
    }

    /*07.创建项目版本新分支
    POST  https://bim.wanda.cn/doc/{projectId}/{projectVersionId}/branch?
                    newProjectVersionId={newProjectVersionId}&lockFileId={lockFileId}
    参数名             是否必选        类型      描述
    projectId	        是	 	                 项目ID
    projectVersionId	是	 	                 版本ID
    newProjectVersionId	是	 	                 新的项目版本ID
    lockFileId	        否	 	                 新的项目版本中要锁定的文件ID*/
    public String createProjectVersion(){
        requestURL = "/doc/"+projectId+"/"+projectVersionId+"/file/branch?newProjectVersionId="+newProjectVersionId;

        if(StringUtils.isNotBlank(lockFileId)){
            requestURL = TB.getURL(requestURL) + "lockFileId=" + lockFileId;
        }

        //send request
        try {
            response = TB.apiResponse(requestURL, "POST");

        }catch (Exception e){

        }

        return response;
    }

    /*08.创建当前版本快照
    POST  https://bim.wanda.cn/doc/{projectId}/{projectVersionId}/snapshot/{snapshotId}?status={status}
    参数名             是否必选        类型      描述
    projectId	        是	 	                 项目ID
    projectVersionId	是	 	                 版本ID
    snapshotId	        是	 	                 快照ID
    status	            是	 	                 创建快照后文件的状态*/
    public String createSnapshot(){
        requestURL = "/doc/"+projectId+"/"+projectVersionId+"/snapshot/"+snapshotId+"?status="+status;

        //send request
        try {
            response = TB.apiResponse(requestURL, "POST");

        }catch (Exception e){

        }

        return response;
    }

    /*09.修改当前版本快照状态
    //PUT  https://bim.wanda.cn/doc/{projectId}/{projectVersionId}/snapshot/{snapshotId}?status={status}
    参数名             是否必选        类型      描述
    projectId	        是	 	                 项目ID
    projectVersionId	是	 	                 版本ID
    snapshotId	        是	 	                 快照ID
    status	            是	 	                 创建快照后文件的状态*/
    public String modifySnapshotStatus(){
        requestURL = "/doc/"+projectId+"/"+projectVersionId+"/snapshot/"+snapshotId+"?status="+status;

        //send request
        try {
            response = TB.apiResponse(requestURL, "PUT");

        }catch (Exception e){

        }

        return response;
    }

    /*10.初始版本移交-TODO
    POST  https://bim.wanda.cn/doc/{projectId}/{projectVersionId}/transfer?snapshotId={snapshotId}
    参数名             是否必选        类型      描述
    projectId	        是	 	                 项目ID
    projectVersionId	是	 	                 版本ID
    snapshotId	        是	 	                 快照ID
    status	            是	 	                 创建快照后文件的状态*/
    public void transferSnapshot(){}

    /*11.获取集成模型ID
    GET  https://bim.wanda.cn/doc/{projectId}/{projectVersionId}/model
    参数名             是否必选        类型      描述
    projectId	        是               	 	 项目ID
    projectVersionId	是	 	                 项目版本ID*/
    public String getModelSetId(){
        requestURL ="/doc/"+projectId+"/"+projectVersionId+"/model";

        //send request
        try {
            response = TB.apiResponse(requestURL, "GET");

        }catch (Exception e){

        }

        return response;
    }

    /*12.基于已有项目创建新项目
    POST    https://bim.wanda.cn/doc/{projectId}/{projectVersionId}/copy?
                    projectCode={projectCode}&newProjectId={newProjectId}&newProjectVersionId={newProjectVersionId}&newProjectCode={newProjectCode}
    参数名             是否必选        类型      描述
    projectId	        是               	 	 项目ID
    projectVersionId	是	 	                 项目版本ID
    projectCode	        是	 	                 已有项目的代码
    newProjectId	    是	 	                 新项目ID
    newProjectVersionId	是	 	                 新项目版本ID
    newProjectCode	    是	 	                 新项目代码*/
    public String createNewProjectWithCopy(){
        newProjectVersionId = "";
        requestURL ="/doc/"+projectId+"/"+projectVersionId+"/copy?projectCode="+projectCode+
                            "&newProjectId="+newProjectId+
                            "&newProjectVersionId="+ newProjectId+
                            "&newProjectCode="+newProjectCode;

        //send request
        try {
            response = TB.apiResponse(requestURL, "POST");

        }catch (Exception e){

        }

        return response;
    }

    /*13.创建文件夹
    POST   https://bim.wanda.cn/doc/{projectId}/{projectVersionId}/file?parentId={parentId}&filePath={filePath}
    参数名             是否必选        类型      描述
    projectId	        是               	 	 项目ID
    projectVersionId	是	 	                 项目版本ID
    parentId	        否	 	                 父目录ID，为null表示从根目录开始创建
    filePath	        是	 	                 根据路径创建文件夹*/
    public String createFolder(){
        requestURL ="/doc/"+projectId+"/"+projectVersionId+"/file?filePath="+filePath;

        if (StringUtils.isNotBlank(parentId))
        {
            requestURL = requestURL + "&parentId=" + parentId;
        }

        //send request
        try {
            response = TB.apiResponse(requestURL, "POST");

        }catch (Exception e){

        }

        return response;
    }

    /*14.重命名文件
    PUT   https://bim.wanda.cn/doc/{projectId}/{projectVersionId}/file/rename?fileVersionId={fileVersionId}&name={name}
    参数名             是否必选        类型      描述
    projectId	        是               	 	 项目ID
    projectVersionId	是	 	                 项目版本ID
    fileVersionId	    是	 	                 文件版本ID
    name	            是	 	                 文件名称*/
    public String renameFile(){
        requestURL ="/doc/"+projectId+"/"+projectVersionId+"/file/rename?fileVersionId="+fileVersionId+"&name="+name;

        //send request
        try {
            response = TB.apiResponse(requestURL, "PUT");

        }catch (Exception e){

        }

        return response;
    }

    /*15.删除文件
    DELETE   https://bim.wanda.cn/doc/{projectId}/{projectVersionId}/file?fileVersionId={fileVersionId}
    参数名             是否必选        类型      描述
    projectId	        是               	 	 项目ID
    projectVersionId	是	 	                 项目版本ID
    fileVersionId	    是	 	                 文件版本ID*/
    public String deleteFile(){
        requestURL ="/doc/"+projectId+"/"+projectVersionId+"/file?fileVersionId="+fileVersionId;

        //send request
        try {
            response = TB.apiResponse(requestURL, "DELETE");

        }catch (Exception e){

        }

        return response;
    }

    /*16.获取文件缩略图
    GET   https://bim.wanda.cn/doc/{projectId}/{projectVersionId}/file/thumbnail?fileVersionId={fileVersionId}
    参数名             是否必选        类型      描述
    projectId	        是               	 	 项目ID
    projectVersionId	是	 	                 项目版本ID
    fileVersionId	    是	 	                 文件版本ID*/
    public String getFileThumbnail(){
        requestURL ="/doc/"+projectId+"/"+projectVersionId+"/file/thumbnail?fileVersionId="+fileVersionId;

        //send request
        try {
            response = TB.apiResponse(requestURL, "GET");

        }catch (Exception e){

        }

        return response;
    }

    /*17.根据楼层和专业获取文件
    GET   https://bim.wanda.cn/doc/{projectId}/{projectVersionId}/file/filter?floor={floor}&specialty={specialty}
    参数名             是否必选        类型      描述
    projectId	        是               	 	 项目ID
    projectVersionId	是	 	                 项目版本ID
    floor	            是	 	                 为null表示所有楼层
    specialty	        是	 	                 多个专业用,分隔*/
    public String getFileWithFloorAndSpecialty(){
        requestURL ="/doc/"+projectId+"/"+projectVersionId+"/file/filter?floor="+floor+"&specialty="+specialty;

        //send request
        try {
            response = TB.apiResponse(requestURL, "GET");

        }catch (Exception e){

        }

        return response;
    }

    /*18.修改当前版本状态
    PUT    https://bim.wanda.cn/doc/{projectId}/{projectVersionId}?status={status}
    参数名             是否必选        类型      描述
    projectId	        是               	 	 项目ID
    projectVersionId	是	 	                 项目版本ID
    status	            是	 	                 创建快照后文件的状态*/
    public String modifyVersionStatus(){
        requestURL ="/doc/"+projectId+"/"+projectVersionId+"?status="+status;

        //send request
        try {
            response = TB.apiResponse(requestURL, "PUT");

        }catch (Exception e){

        }

        return response;
    }

    /*19.根据模型ID反查文件版本ID
    PUT    https://bim.wanda.cn/doc/{projectId}/{projectVersionId}?modelId={modelId}
    参数名             是否必选        类型      描述
    projectId	        是               	 	 项目ID
    projectVersionId	是	 	                 项目版本ID
    modelId	            是	 	                 文件模型ID*/
    public String searchVersionIdWithModelId(){
        requestURL ="/doc/"+projectId+"/"+projectVersionId+"?modelId="+modelId;

        //send request
        try {
            response = TB.apiResponse(requestURL, "PUT");

        }catch (Exception e){

        }

        return response;
    }

    /*20.检查文件大小
    GET    https://bim.wanda.cn/doc/{projectId}/{versionId}/file/size?fileVersionId={fileVersionId}
    参数名             是否必选        类型      描述
    projectId	        是               	 	 项目ID
    projectVersionId	是	 	                 项目版本ID
    versionId           是	 	                 版本ID*/
    public String checkFileSize(){
        requestURL ="/doc/"+projectId+"/"+versionId+"/file/size?fileVersionId="+fileVersionId;

        //send request
        try {
            response = TB.apiResponse(requestURL, "GET");

        }catch (Exception e){

        }

        return response;
    }

}
